package wahadlo.math;

/**
 * Interfejs funkcji. Reprezentuje pewną absrakcyjną funkcję, która na podstawie
 * zadaych punktów zwraca pewną wartość (wynik).
 * 
 * @author Koziołek
 * 
 */
public interface Function {
	/**
	 * Stała - przyspieszenie ziemskie. Interfejs słuzy przede wszystkim do
	 * prezentacji funkcji spotykanych w fizyce zatem dołączono podstawowe
	 * stałe.
	 */
	static final Double G = 9.80665;

	/**
	 * Metoda na podstawie zadaych parametrów zwraca wartość funkcji w punkcie.
	 * Przykład:<br/> Chcemy obliczyć wartość funkcji<br/> F(x,y) = x + y<br/>
	 * w punkcie x<sub>0</sub> = [0, 0]<br/> W tym celu możemy
	 * zaimplementować interfejs <code>Function</code> w następujący sposób:
	 * 
	 * <pre>
	 * Function f = new Function() {
	 * 	public Double getValue(Double... points) {
	 * 		if (points == null)
	 * 			throw new NullPointerException(&quot;Brak punktów!&quot;);
	 * 		if (points.length != 2)
	 * 			throw new IllegalArgumentException(&quot;Zła ilość punktów! Jest &quot;
	 * 					+ points.length + &quot; powinno być 2&quot;);
	 * 
	 * 		Double x = points[0];
	 * 		Double y = points[1];
	 * 		if (x == null || y == null)
	 * 			throw new NullPointerException(&quot;jeden z punktów jest null!&quot;);
	 * 
	 * 		return x + y;
	 * 	}
	 * };
	 * </pre>
	 * 
	 * Następnie możemy obliczyć wartość funkcji w zadanym punkcie:
	 * 
	 * <pre>
	 * Double wartosc = f(0., 0.);
	 * </pre>
	 * 
	 * @param points
	 *            parametry dla których liczymy wartość funkcji.
	 * @return wartość funkcji dla zadanych parmetrów.
	 */
	public Double getValue(Double... points);
}
